Flash memories typically employ arrays of analog memory cells for storing data. Each analog memory cell can store an analog value, such as an electrical charge or voltage, that represents the information stored in the corresponding cell. Each analog memory cell can hold a certain amount of electrical charge. The range of possible analog values is typically divided into intervals each corresponding to one or more data bit values (e.g., two bits, three bits or four bits). Generally, data is written to an analog memory cell by writing a nominal analog value that corresponds to the desired bit or bits.
Commonly, two types of flash memory devices are used: single-level cell (SLC) flash memory and multi-level cell (MLC) flash memory. SLC flash memory can store a single bit of information in each memory cell, whereas MLC flash memory can store two or more bits per memory cell. While programming for SLC flash memory is generally simple (e.g., as only one bit is placed in a cell), its storage capacity is generally smaller than MLC flash memory and thus less desirable for applications that demand large storage capacity.
To achieve high data storage in MLC flash memory, conventional manufacturing techniques focus on decreasing the size of each individual MLC memory cell without sacrificing benchmark performance. However, decreasing the size of MLC cells also reduces the distance separating the cells, which can cause the MLC flash memory to be susceptible to floating gate coupling and threshold voltage drift (e.g., as the cells are more compact and placed closer together), resulting in data corruption and/or high bit error rate.